//!
/**
 ***********************************************************************************************************
 * <RBFile Implementation>
 ***********************************************************************************************************
 * @file RBFile.cpp
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Precompiled Header
 ***********************************************************************************************************/
#include "RBMainPCH.h"

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBFile.h"

/***********************************************************************************************************
 * Defines
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Classes implementation
 ***********************************************************************************************************/

/**
 ***********************************************************************************************************
 * Constructor
 ***********************************************************************************************************/
RBFile::RBFile()
{
}

/**
 ***********************************************************************************************************
 * Destructor
 ***********************************************************************************************************/
RBFile::~RBFile()
{
    Close();
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
RBFile* RBFile::Open(const char* pcFilename, uint32 eOpenMode)
{
    RBFile* pFile = new RBFile();

    if (!pFile->Load(pcFilename, eOpenMode))
    {
        delete pFile;
        pFile = NULL;
    }

    return pFile;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
bool RBFile::Load(const char* pcFilename, uint32 eOpenMode)
{
    std::ios_base::openmode eMode = 0;
    if (eOpenMode & FOM_READ)
    {
        eMode |= std::ios_base::in;
    }

    if (eOpenMode & FOM_WRITE)
    {
        eMode |= std::ios_base::out;
    }
    eMode |= std::ios_base::binary;

    m_kFile.open(pcFilename, eMode);

    if (!m_kFile)
    {
        return false;
    }

    // get length of file:
    m_kFile.seekg (0, std::ios::end);
    m_uiSize = (uint32)m_kFile.tellg();
    m_kFile.seekg (0, std::ios::beg);

    return true;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBFile::Close(RBFile*& pFile)
{
    delete pFile;
    pFile = NULL;
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBFile::Close()
{
    m_kFile.close();
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBFile::Read(char* pcBuffer, uint32 uiSize)
{
    m_kFile.read(pcBuffer, uiSize);
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBFile::Write(const char* pcBuffer, uint32 uiSize)
{
    m_kFile.write(pcBuffer, uiSize);
}
/***********************************************************************************************************/
